#!/bin/bash

#########################################
# run-problem3-split-128m-reduce-8.sh
# 自动编译 + 打包 + 运行 Problem3（32MB分片 | 4个Reduce | 开启Combiner）
#########################################

BASE_DIR="/home/hadoop/hw2_hadoop/java_code/s522025320243-邹丁-hadoop-assignment"
SRC_DIR="${BASE_DIR}/src/main/java"
TARGET_DIR="${BASE_DIR}/target"
CLASSES_DIR="${TARGET_DIR}/classes"
JAR_FILE="${BASE_DIR}/hadoop-assignment.jar"

STUDENT_ID="s522025320243"

# Problem3 主类
MAIN_CLASS="com.bigdata.assignment.problem3.WordCountOptimizedDriver"

# 核心参数配置（新增Combiner开关）
splitMaxSize="33554432"  # 32MB (32*1024*1024)
splitSize="32MB"
numReduceTasks="4"
enableCombiner="true"    # 开启Combiner

# 输入输出路径（含Combiner标识，避免冲突）
INPUT_DIR="/public/data/wordcount"
OUTPUT_DIR="/users/${STUDENT_ID}/homework1/problem3-split-${splitSize}-reduce-${numReduceTasks}-combiner-${enableCombiner}"

# 本地保存结果（含Combiner标识）
LOCAL_SAVE_DIR="${BASE_DIR}/output/problem3/split-${splitSize}-reduce-${numReduceTasks}-combiner-${enableCombiner}"

echo "==============================="
echo "  🚀 Problem 3: ${splitSize}分片 | ${numReduceTasks}个Reduce | Combiner: ${enableCombiner}"
echo "==============================="

#########################################
# 1. 清理旧文件
#########################################
echo "🧹 清理旧的 target 目录..."
rm -rf "${CLASSES_DIR}" "${JAR_FILE}"
mkdir -p "${CLASSES_DIR}"
mkdir -p "${LOCAL_SAVE_DIR}"

#########################################
# 2. 编译 Java 源码
#########################################
echo "🔨 正在编译 Java 源码..."
javac -cp "$(hadoop classpath)" -d "${CLASSES_DIR}" $(find "${SRC_DIR}" -name "*.java")
if [ $? -ne 0 ]; then
    echo "❌ 编译失败"
    exit 1
fi
echo "✅ 编译成功"

#########################################
# 3. 打包 JAR
#########################################
echo "📦 正在打包 JAR..."
jar -cvf "${JAR_FILE}" -C "${CLASSES_DIR}" .
if [ $? -ne 0 ]; then
    echo "❌ 打包失败"
    exit 1
fi
echo "✅ 打包完成: ${JAR_FILE}"

#########################################
# 4. 删除 HDFS 旧输出
#########################################
echo "🧹 删除旧的 HDFS 输出目录: ${OUTPUT_DIR}"
hdfs dfs -rm -r -f "${OUTPUT_DIR}" >/dev/null

#########################################
# 5. 运行 Hadoop 任务（传递5个参数，含Combiner开关）
#########################################
echo "🚀 提交 Hadoop 作业..."
hadoop jar "${JAR_FILE}" ${MAIN_CLASS} \
  ${INPUT_DIR} \
  ${OUTPUT_DIR} \
  ${splitMaxSize} \
  ${numReduceTasks} \
  ${enableCombiner}  # 传递Combiner开关参数
if [ $? -ne 0 ]; then
    echo "❌ Hadoop 作业执行失败"
    exit 1
fi
echo "✅ Hadoop 作业完成"

#########################################
# 6. 下载结果到本地
#########################################
echo "💾 下载结果到本地: ${LOCAL_SAVE_DIR}"

hdfs dfs -get -f "${OUTPUT_DIR}/word-count-results.txt" "${LOCAL_SAVE_DIR}/word-count-results.txt"
hdfs dfs -get -f "${OUTPUT_DIR}/performance-report.txt" "${LOCAL_SAVE_DIR}/performance-report.txt"

echo "📥 已下载结果："
ls -l "${LOCAL_SAVE_DIR}"

echo "🎉 Problem 3（${splitSize}分片 | ${numReduceTasks}个Reduce | Combiner: ${enableCombiner}）完成！"